const { UrlConfig, PATH, ACTION } = require('./api/url')
const { env } = require('./lib/config')

const PATH_USER = UrlConfig.user[PATH]
const ACTION_GET_USER = UrlConfig.user[ACTION]['getUser']

App({
  onLaunch: function () {
    // 云环境检测
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力')
    } else {
      wx.cloud.init({
        env: env === 'dev' ? 'dev-8asmc' : 'realse-wipfv',
        traceUser: true,
      })
    }

    this._checkUpdate() //检查版本更新
    wx.setStorageSync('showImageAds', true) //[temp]每次打开默认显示广告
    
    try {
      this.global.user = wx.getStorageSync("user") || {}
    } catch (n) {
      console.log("get local user info failed")
    }
    this.http = require('./lib/http').http(this)
    this.isLogin() || this.login()
  },
  global: {
    user: null
  },
  // http: new require('./lib/http').http(), // 全局绑定http请求方法
  isLogin() {
    this.global.user = this.global.user || wx.getStorageSync('user')
    return this.global.user && this.global.user._openid
  },
  login() {
    return new Promise((resolve, reject) => {
      this.getUserInfo().then(data => {
        // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
        // 所以此处加入 callback 以防止这种情况,callback在page.onLoad中定义
        this.userInfoReadyCallback &&  this.userInfoReadyCallback(data)
      })
    })
  },
  // 获取用户数据
  getUserInfo(forceReload=false) {
    return new Promise((resolve, reject) => {
      // 本地获取
      if (!forceReload && this.global.user && this.global.user._openid) {
        return resolve(this.global.user)
      }
      // 数据库获取
      this.http(PATH_USER, { action: ACTION_GET_USER }).then(data => {
        if (data._id && data._openid) {
          this.global.user = data
          wx.setStorageSync('user', data)
        }
        resolve(data)
      }, e => {
        console.error(e)
        reject(e)
      })
    })
  },
  // 更新上一页数据
  updatePrevPage (data) {
    let pages = getCurrentPages(); //获取页记录
    let prevPage = pages[pages.length - 2]; //上一页
    if (prevPage) {
      prevPage.setData(data);
    }
  },
  // 检查小程序新版本
  _checkUpdate () {
    var updater = wx.getUpdateManager()
    updater.onCheckForUpdate(function (res) {
      console.log('check for new version: ', res.hasUpdate)
    })
    updater.onUpdateReady(function () {
      wx.showModal({
        title: "更新提示",
        content: "新版本已经准备好，是否重启应用？",
        success: function (res) {
          res.confirm && updater.applyUpdate()
        }
      })
    })
    updater.onUpdateFailed(function () {
      console.log('update failed')
    })
  }
})
